import java.util.GregorianCalendar;

/**
 * 
 * @author Emerson Borges - emerson.borges@ccc.ufcg.edu.br
 * @author Rafael Lima    - rafael_ufcg10@gmail.com
 *
 */

public class Evento {
	
	private String nomeEvento;
	private GregorianCalendar dataEvento;
	private String horarioEvento;
	private String duracaoEvento;
	private String descricaoEvento;
	private String tipoEvento;
	
	//TODO: Caso um evento cubra outro, perguntar se quer cancelar o primeiro;
	
	/**
	 * Construtor de um evento
 	 * @param nomeEvento - nome do do evento
	 * @param dataEvento - data do evento
	 * @param horarioEvento - hora do evento
	 * @param duracaoEvento - duracao do evento
	 * @param descricaoEvento - descricao do evento
	 * @param tipoEvento - tipo do evento
	 */
	public Evento(String nomeEvento, GregorianCalendar dataEvento, String horarioEvento, String duracaoEvento, String descricaoEvento, String tipoEvento){
		
		this.nomeEvento = nomeEvento;
		this.dataEvento = dataEvento;
		this.horarioEvento = horarioEvento;
		this.duracaoEvento = duracaoEvento;
		this.descricaoEvento = descricaoEvento;
		this.tipoEvento = tipoEvento;
	}
	
	/**
	 * Metodo para acessar o nome do evento
	 * @return nomeEvento
	 */
	public String getNomeEvento(){
		return nomeEvento;
	}
	
	/**
	 * Metodo para acessar a data do evento 
	 * @return dataEvento
	 */
	public GregorianCalendar getDataEvento(){
		return dataEvento;
	}
	
	/**
	 * Metodo para acessar o horario do evento
	 * @return horarioEvento
	 */
	public String getHorarioEvento(){
		return horarioEvento;
	}
	
	/**
	 * Metodo para acessar a duracao do evento
	 * @return duracaoEvento
	 */
	public String getDuracaoEvento(){
		return duracaoEvento;
	}
	
	/**
	 * Metodo para acessar a descricao do evento
	 * @return descricaoEvento
	 */
	public String getDescricaoEvento(){
		return descricaoEvento;
	}
	
	/**
	 * Metodo para modificar o nome do evento
	 * @param nomeEvento
	 */
	public void setNomeEvento(String nomeEvento){
		this.nomeEvento = nomeEvento;
	}
	
	/**
	 * Metodo para modificar o a data do evento
	 * @param dataEvento
	 */
	public void setDataEvento(GregorianCalendar dataEvento){
		this.dataEvento = dataEvento;
	}

	/**
	 * Metodo para modificar o horario do evento
	 * @param horarioEvento
	 */
	public void setHorarioEvento(String horarioEvento) {
		this.horarioEvento = horarioEvento;
	}

	/**
	 * Metodo para modificar a duracao do evento
	 * @param duracaoEvento
	 */
	public void setDuracaoEvento(String duracaoEvento) {
		this.duracaoEvento = duracaoEvento;
	}

	/**
	 * Metodo para modificar a descricao do evento
	 * @param descricaoEvento
	 */
	public void setDescricaoEvento(String descricaoEvento) {
		this.descricaoEvento = descricaoEvento;
	}
	
	/**
	 * Metodo para acessar o tipo do evento
	 * @return
	 */
	public String getTipoEvento() {
		return tipoEvento;
	}

	/**
	 * Metodo para modificar o tipo do evento
	 * @return
	 */
	public void setTipoEvento(String tipoEvento) {
		this.tipoEvento = tipoEvento;
	}
	
	/**
	 * Metodo para adicionar um evento ao usuario
	 */
	public void adcionarEvento() {

	}
	
	@Override
	public String toString(){
		return String.format("Nome: %s\n Data: %s\n Horario: %s\n Duracao: %s\n Descricao: %s\n Tipo: %s\n", getNomeEvento(), getDataEvento(), getHorarioEvento(), getDuracaoEvento(), getDescricaoEvento(), getTipoEvento());
	}
	
	/**
	 * Verifica se dois contatos sao iguais
	 */
	public boolean equals(Object obj){
		if(!(obj instanceof Evento)){
			return false;
		}
		Evento outra = (Evento) obj;
		return getNomeEvento().equals(outra.getNomeEvento());

	}

}